#ifndef 结构体_H
#define 结构体_H

#include <iostream>
#include <cstring>
using namespace std;

class FRotator
{
public:
    FRotator() :Pitch(0.f), Yaw(0.f), Roll(0.f) {

    }
    FRotator(float _Pitch, float _Yaw, float _Roll) : Pitch(_Pitch), Yaw(_Yaw), Roll(_Roll)
    {

    }
    ~FRotator()
    {

    }
    float Pitch;
    float Yaw;
    float Roll;
    inline FRotator Clamp()
    {

        if (Pitch > 180)
        {
            Pitch -= 360;
        }
        else
        {
            if (Pitch < -180)
            {
                Pitch += 360;
            }
        }
        if (Yaw > 180)
        {
            Yaw -= 360;
        }
        else {
            if (Yaw < -180)
            {
                Yaw += 360;
            }
        }
        if (Pitch > 89)
        {
            Pitch = 89;
        }
        if (Pitch < -89)
        {
            Pitch = -89;
        }
        while (Yaw < 180)
        {
            Yaw += 360;
        }
        while (Yaw > 180)
        {
            Yaw -= 360;
        }
        Roll = 0;
        return FRotator(Pitch, Yaw, Roll);
    }
    inline float Length()
    {
        return sqrtf(Pitch * Pitch + Yaw * Yaw + Roll * Roll);
    }
    FRotator operator+(FRotator v) {
        return FRotator(Pitch + v.Pitch, Yaw + v.Yaw, Roll + v.Roll);
    }
    FRotator operator-(FRotator v) {
        return FRotator(Pitch - v.Pitch, Yaw - v.Yaw, Roll - v.Roll);
    }
};

// 确保每个类型和变量只定义了一次
struct 开关
{
	bool 绘制;
	bool hide_process;
	bool 方框;
	bool 射线;
	bool 猎鹰;
	bool 距离;
	bool 被瞄;
	bool 视角追踪;
	bool 忽略人机;
	bool 血量;
	bool 血量1;
	bool 名字;
	bool 过检;
	bool 预测;
	bool 观战;
//	bool 解密数组;
	bool 人数;
	bool 调试;
	bool 骨骼;
	bool 手持;
	bool 车辆;
	bool 盒子;
	bool 空投;
	bool 金仓;
	bool 手雷预警;
	bool 背敌预警;
	bool 雷达;
	
	float 速度值 = 1.15;
	float 雷达X = 300;
	float 雷达Y = 400;
	float rotationAngle = 0.0f;
	float 方框粗细 = 0.1f;
	float 射线粗细 = 0.1f;
	float 骨骼粗细 = 0.1f;
	
	bool 自瞄选项;
	bool 物资总开关;
//下面写
    bool 信号枪;
	bool 电竞信号枪;
	bool 召回信号枪;
	bool 圣诞信号枪;
	bool 夏日信号枪;
	bool 盔仔信号枪;
	bool 蜜罐;
	bool M762;
	bool VAL;
	bool G63C;
	bool Famas;
	bool 狗砸;
	bool AKM;
	bool QBZ;
	bool MK47;
	bool AUG;
	bool M16A4;
	bool SCAR;
	bool M416;
	bool 十字弩;
	bool AWM;
	bool kar98k;
	bool M24;
	bool Mini14;
	bool Win94;
	bool SLR;
	bool AMR;
	bool M417;
	bool MK20;
	bool MK12;
	bool QBU;
	bool SKS;
	bool MK14;
	bool M200;
	bool 莫辛纳甘;
	bool 爆炸猎弓;
	bool VSS;
	bool DP28;
	bool M249;
	bool PKM;
	bool MG3;
	bool P90;
	bool MP5K;
	bool 野牛;
	bool UMP9;
	bool 维克托;
	bool 汤姆逊;
	bool UZI;
	bool S12K;
	bool S1897;
	bool 双管猎枪;
	bool DBS;
	bool SPAS;
	bool AA12;
	bool 短管散弹枪;
	bool R1895;
	bool R45双持;
	bool 沙漠之鹰;
	bool TMP9;
	bool 蝎式手枪;
	bool P18C;
	bool R1911;
	bool P92;
	bool 平底锅;
	bool 镰刀;
	bool 撬棍;
	bool 大砍刀;
	bool 盾牌;
	bool 燃烧瓶;
	bool 烟雾弹;
	bool 震爆弹;
	bool 手榴弹;
	bool 烟雾榴弹;
	bool 一级甲;
	bool 二级甲;
	bool 三级甲;
	bool 一级头;
	bool 二级头;
	bool 三级头;
	bool 一级包;
	bool 二级包;
	bool 三级包;
	bool 吉利服;
	bool 吉利服1;
	bool 汽油;
	bool 医疗箱;
	bool 急救包;
	bool 绷带;
	bool 可乐;
	bool 肾上腺素;
	bool 止痛药;
	bool 自救器;
	bool 马格南;
	bool A762;
	bool A556;
	bool A9毫米;
	bool A12口径;
	bool A45口径;
	bool A57MM;
	bool A50口径;
	bool 信号枪子弹;
	bool 箭矢;
	bool 红点;
	bool 全息;
	bool 二倍镜;
	bool 三倍镜;
	bool 四倍镜;
	bool 六倍镜;
	bool 八倍镜;
	bool 侧面镜;
	bool 战术瞄准镜;
	bool 子弹袋;
	bool 箭袋;
	bool 激光瞄准镜;
	bool 轻型握把;
	bool 半载握把;
	bool UZI枪托;
	bool 狙击枪托;
	bool 步枪枪托;
	bool 狙击补偿器;
	bool 狙击枪消焰器;
	bool 狙击枪消音器;
	bool 步枪消音器;
	bool 步枪补偿器;
	bool 步枪消焰器;
	bool 冲锋枪消音器;
	bool 冲锋枪消焰器;
	bool 拇指握把;
	bool 垂直握把;
	bool 直角握把;
	bool 撞火枪托;
	bool 霰弹快速;
	bool 鸭嘴枪口;
	bool 霰弹收束;
	bool 狙击枪快扩;
	bool 狙击枪扩容;
	bool 狙击枪快速;
	bool 步枪快扩;
	bool 步枪扩容;
	bool 步枪快速;
	bool 冲锋枪快扩;
	bool 冲锋枪扩容;
	bool 冲锋枪快速;
	bool 手枪快扩;
	bool 手枪快速;
	bool 手枪扩容;
//上面写
	bool 盒子物资;
	bool 绘制武器箱;
	bool 绘制药箱;
	bool 绘制宝箱;
	bool 军事宝箱;
	bool 海盗福利箱;
	

	int dygl = 0;
	int 血条样式 = 0;
	int 帧率选项 = 2;
	unsigned int 当前帧率 = 120;
	
	int VehicleID;
	
	float 测试数值 = 0.0f;
};


struct 自瞄
{ 
  bool 初始化;
  bool 触摸位置;
  bool 动态自瞄;
  bool 准星射线;
  bool 倒地不瞄;
  bool 掉血自瞄;
  bool 自瞄控件;
  bool 喷子自瞄;
  bool 狙击自瞄;
  bool 人机不瞄;
  bool 框内自瞄;
  bool 隐藏自瞄圈;
  bool 随机触摸点;
  
  int 自瞄条件 = 0;
  int 充电口方向 = 1;
  int 瞄准优先 = 0;
  int 瞄准部位 = 1;
  int 喷子自瞄条件 = 0;
  float 自瞄范围 = 100.0f;
  float 动态范围 = 150.0f;
  float 触摸范围 = 200.0f;
  float 压枪力度 = 2.00f;
  float 自瞄速度 = 16.0f;
  float 预判力度 = 1.60f;
  
  int 瞄准目标;
  float 触摸范围X = 1500.0f;
  float 触摸范围Y = 650.0f;
  
  int 瞄准对象数量 = 0;
  int 瞄准总数量 = 0;
  
  float 掉血自瞄数率 = 8.0f;
  
  float 喷子距离限制 = 25.0f;  
  float 趴下位置调节 = 1.0f;
  float 触摸采样率 = 800;
  
  float 腰射距离限制 = 25.0f;
  float 自瞄距离限制 = 150.0f;
};

struct 地址
{
	uintptr_t libdi;
	uintptr_t libue4;
	uintptr_t 世界地址;
	uintptr_t 类地址;
	uintptr_t 解密地址;
	uintptr_t 自身地址;
	uintptr_t 矩阵地址;
	uintptr_t 矩阵地址_Tol;
	uintptr_t 数组地址;
};

struct FMatrix{
	float M[4][4];
};

struct D2DVector
{
	float X;
	float Y;
	D2DVector() {
        this->X = 0;
        this->Y = 0;
    }
    D2DVector(float x, float y) {
        this->X = x;
        this->Y = y;
    }
};

struct D3DVector
{
	float X;
	float Y;
	float Z;
	D3DVector() {
        this->X = 0;
        this->Y = 0;
        this->Z = 0;
    }
    D3DVector(float x, float y,float z) {
        this->X = x;
        this->Y = y;
        this->Z = z;
    }
};

struct 自瞄信息{
    D3DVector 瞄准坐标;
	D3DVector 人物向量;  
    float 准心距离 = 10000;
    float 距离 = 10000; 
    D2DVector 对象骨骼;
    long int Bone;
    long int Human;
    int 血量;
    string 名字;
 //   float 头;
 //	float 甲;
	int 阵营;
	long 头甲包地址;
	D3DVector 骨骼坐标[17];
};

struct D4DVector
{
	float X;
	float Y;
	float Z;
	float W;
	D4DVector() {
        this->X = 0;
        this->Y = 0;
        this->Z = 0;
        this->W = 0;
    }
    D4DVector(float x, float y,float z,float w) {
        this->X = x;
        this->Y = y;
        this->Z = z;
        this->W = w;
    }
};



struct FTransform{
	D4DVector Rotation;
	D3DVector Translation;
	float chunk;
	D3DVector Scale3D;
};



struct 骨骼数据{
	D2DVector Head;	//头部
	D2DVector Chest;	//胸部
	D2DVector Pelvis;	//盆骨
	D2DVector Left_Shoulder;	//左肩膀
	D2DVector Right_Shoulder;	//右肩膀
	D2DVector Left_Elbow;	//左手肘
	D2DVector Right_Elbow;	//右手肘
	D2DVector Left_Wrist;	//左手腕
	D2DVector Right_Wrist;	//右手腕
	D2DVector Left_Thigh;	//左大腿
	D2DVector Right_Thigh;	//右大腿
	D2DVector Left_Knee;	//左膝盖
	D2DVector Right_Knee;	//右膝盖
	D2DVector Left_Ankle;	//左脚腕
	D2DVector Right_Ankle;	//右脚腕
};

struct 自身数据
{
	D3DVector 坐标;
	D2DVector 准星;
	D3DVector 视角;
	float 矩阵[16];
	int 自身队伍;
	int 自身状态;
	int 开火;
	int 开镜;
	int 手持;
	float Fov;
	float 子弹速度;
	float 后坐力数据;
	uintptr_t 驱动自瞄地址;
	float 准星Y;
	float 人物高度;
};

//地址结构体
struct 对象地址
{
	long 敌人地址;
	long 物品地址[1000];
	long 车辆地址[50];
};

struct 敌人信息
{
	D3DVector 坐标;
	D3DVector 真实坐标;
	D3DVector 向量;
	D3DVector 骨骼坐标[17];
	D2DVector 雷达;
	bool isboot;
	string 名字;
	int 观战;
	int 队伍;
	int 状态;
	int 距离;
	int 手持;
	float 当前血量;
	float 最大血量;
	float Rotator;
};
struct 物品信息
{
	D3DVector 坐标;
	int 物品;
	int 距离;
};

struct 车辆信息
{
	D3DVector 坐标;
	int 车辆;
	int 距离;
};

//数据结构体
struct 对象信息
{
	int isCanRead;
	int 敌人数量;
	int 物品数量;
	int 车辆数量;	
	敌人信息 敌人信息;
	物品信息 物品信息[1000];
	车辆信息 车辆信息[50];
};
/*
struct 瞄准信息 {
    float 距离;
    string 名字;
    string 瞄准武器;
};
*/
struct D3DXMATRIX
{
	float _11;
	float _12;
	float _13;
	float _14;
	float _21;
	float _22;
	float _23;
	float _24;
	float _31;
	float _32;
	float _33;
	float _34;
	float _41;
	float _42;
	float _43;
	float _44;
};

struct D3DXVECTOR4
{
	float X;
	float Y;
	float Z;
	float W;
};

struct FTransform1
{
	D3DXVECTOR4 Rotation;
	D3DVector Translation;
	D3DVector Scale3D;
};

#endif
